From: Alessandro Bono Date: Tue, 16 Apr 2024 15:10:53 +0000 (+0200) Subject: gdm/util: Cleanup CredentialManager on successful verification X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~226^2^2~80 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=258ad57b8741d56ac0e58b462172710e17b6dad4;p=gnome-shell.git gdm/util: Cleanup CredentialManager on successful verification CredentialManagers emit a user-authenticated signal with a token upon a successful authentication. This marks the service as preempting and will be used for the next login/unlock request. However, the preempting service is not cleaned after a successful verification. As a consequence, it will be picked on a second unlock request. This doesn't happen after a succesful login request because there is a transition from the gnome-shell process owened by GDM to the one owned by the user. Clean the preempting service on a successful verification, like we do when the PAM conversation stops. Part-of: --- diff --git a/js/gdm/util.js b/js/gdm/util.js index b5a544c8d..07cc17a33 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js @@ -806,7 +806,14 @@ export class ShellUserVerifier extends Signals.EventEmitter { this.emit('reset'); } - _onVerificationComplete() { + _onVerificationComplete(_client, serviceName) { + const isCredentialManager = !!this._credentialManagers[serviceName]; + const isForeground = this.serviceIsForeground(serviceName); + if (isCredentialManager && isForeground) { + this._credentialManagers[serviceName].token = null; + this._preemptingService = null; + } + this.emit('verification-complete'); }